python3小白课:重写父类方法和使用super函数

重写父类方法

子类可以继承父类的方法,但有的时候,子类可能在某些行为上有自己的表现形式,这时候就要重写父类的方法。

咱举个简单的例子,我们知道鸟类有飞翔的技能,​ 鸡也是一种鸟类,那么鸡理论上也继承了飞翔的技能。但实际表现呢?鸡只能扑棱扑棱翅膀,是不能像其他鸟内一样飞的很高的,所以这时候就要重写鸡的飞翔的方法。

[!tip]

鸡属于鸟类。

解析:鸟类在动物分类上属于一个“纲”——“鸟纲”。鸟纲动物就是我们俗称的鸟类。 鸡属于鸟纲,雉科家禽,据研究,鸡的听觉器官(内耳、外耳)对可听声有很好的敏感性。鸡栖息地面,除耳朵外,它的腿部还具有灵敏的振动感受器,震前可能感受到地声,出现行为异常。 所以鸡是鸟类。

图7-7-1 鸡的图片
图7-7-1 鸡的图片

因此我们可以看一下如下示例代码:

# coding:utf-8
class Bird:
    def fly(self):
        print("我在天空,自由飞翔")
class Chicken(Bird):
    def fly(self):
        print("我在地面,扑棱扑棱翅膀")

a = Chicken()
a.fly()

重写父类方法会覆盖掉父类原来的代码,就像示例写的那样。


使用super函数调用父类的构造方法

python规定:如果子类重写了父类的构造方法,那么子类的构造方法必须调用父类的构造方法。我们可以采用super()函数来调用父类的构造方法。

比如我们看这样一个例子:

# coding:utf-8
class Bird:
    def __init__(self):
        self.name = "鸟类"
    def fly(self):
        print("我在天空,自由飞翔")
class Chicken(Bird):
    def __init__(self):
        pass
    def fly(self):
        print("我在地面,扑棱扑棱翅膀")

a = Chicken()
print(a.name)

我们可以看到在这个简单的例子中,子类重写了父类的__init__这个构造方法,但里面什么内容也没写,这样一运行,会报错,实际没有继承和运行父类的构造方法。

但如果我们把代码改成这样:

# coding:utf-8
class Bird:
    def __init__(self):
        self.name = "鸟类"
    def fly(self):
        print("我在天空,自由飞翔")
class Chicken(Bird):
    def __init__(self):
        super().__init__()
    def fly(self):
        print("我在地面,扑棱扑棱翅膀")

a = Chicken()
print(a.name)

添加了这一句:super().__init__()。这样用super()函数指代父类来调用父类的构造方法,这样再执行就可以获取到父类初始化好的name信息了。

这样的应用还可以应用在从多个父类继承的情况下,如果多个父类都写了自己的构造方法,那么默认情况下子类只会调用第一个父类的构造方法并初始化(因为排在前面),这时候就可以写一个子类的构造方法,来分别调用父类的构造方法了,这样多个父类继承也都能初始化到了。大家感兴趣可以自己深入再研究一下。初学阶段掌握到这里就ok了。

单词释义

单词 释义
Bird 鸟,鸟类
fly 飞,飞翔
Chicken
super 超级
Copyright © 雪山凌狐教程 all right reserved,powered by Gitbook该文件修订时间: 2020-07-12 21:29:03

results matching ""

    No results matching ""